home *** CD-ROM | disk | FTP | other *** search
- /* enemy.c */
-
- #include <stdio.h>
- #include <xsp2lib.h>
-
- #include "main.h"
- #include "player.h"
- #include "enemy.h"
-
- #define ENEMY_MAX 32 /* 敵最大数 */
-
- static ENEMY enemy[ENEMY_MAX]; /* ワーク */
- static ENEMY *enemy_top, /* 使用中のワークのリスト */
- *enemy_null_top, /* 空のワークのリスト */
- *enemy_end; /* 使用中ワークのリストの末尾 */
-
-
-
- /* ゲーム開始時に呼ばれる */
- void EnemyInit (void)
- {
- int i;
-
- /* リストをつなげる */
- enemy_top = NULL;
- enemy_end = NULL;
- enemy_null_top = enemy;
- for (i = 0; i < ENEMY_MAX; i++)
- enemy[i].next = &enemy[i + 1];
-
- enemy[ENEMY_MAX - 1].next = NULL;
- }
-
-
-
- /* 敵出現時に呼ばれる */
- void EnemyAlloc (short type, signed short x, signed short y)
- {
- ENEMY *p;
-
- if (enemy_null_top == NULL)
- return; /* 空きのワークがない(キャラクターオーバー) */
-
- /* リストの末尾に新しいノードを追加(他とは違うので注意) */
- p = enemy_null_top;
- enemy_null_top = p->next;
- if (enemy_top == NULL)
- enemy_top = p;
- else
- enemy_end->next = p;
- p->next = NULL;
- enemy_end = p;
-
- p->type = type;
- p->lx = x << 16;
- p->ly = y << 16;
-
- p->pt = obj_zako02;
- p->info = 0x0700 | PRIORITY_ZAKO; /* 数値を決めうちして入れるのはよくない */
-
- return;
- }
-
-
-
- /* 垂直同期ごとに呼ばれる */
- void EnemyMove (void)
- {
- ENEMY *p, *q;
-
- p = enemy_top; /* 現在注目しているワーク */
- q = NULL; /* 1つ前のワーク(ワーク削除時に必要) */
- while (p != NULL) {
- /* 敵キャラの移動ルーチン */
-
- /* X座標を自機に近づける */
- if (p->lx > player->lx)
- p->lx -= 32768;
- else
- p->lx += 32768;
-
- p->ly += 2*65536;
-
- /* 上位ワード(固定整数部)だけ取り出す */
- p->x = p->lx >> 16;
- p->y = p->ly >> 16;
-
- if (p->y > 256+32) { /* Y座標が 256+32 以上なら消去 */
- if (q == NULL) { /* リストの一番最初を削除 */
- enemy_top = p->next;
- p->next = enemy_null_top;
- enemy_null_top = p;
- q = NULL;
- p = enemy_top;
- } else {
- if (p == enemy_end) { /* リストの一番最後を削除 */
- q->next = NULL;
- enemy_end = q;
- p->next = enemy_null_top;
- enemy_null_top = p;
- p = q->next;
- } else {
- q->next = p->next;
- p->next = enemy_null_top;
- enemy_null_top = p;
- p = q->next;
- }
- }
- } else {
- xobj_set_st (p); /* 表示 */
- q = p;
- p = p->next;
- }
- }
-
- }
-